home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Dev / misc / temgen.lha / Temgen / tg-0.11 / tg.l < prev    next >
Text File  |  2002-12-18  |  7KB  |  186 lines

  1. %{
  2. #include "y.tab.h"
  3. #include "alloc.h"
  4. #include "sysdefs.h"
  5. #include "txttab.h"
  6.     
  7. YYSTYPE  yylval;
  8.  
  9. void no_operation() {};
  10. #define  dprintf  no_operation
  11.  
  12. int lineno = 1;
  13. int charno = 0;
  14.  
  15. extern struct txttab *text_table;
  16.  
  17. #define    SETYYLVAL(v)  { v.line=lineno; v.start=charno; \
  18.                            charno+=strlen(yytext); v.end=charno; \
  19.                            tt_token( text_table, yytext ); }
  20.  
  21. #define    STORETEXT()   { tt_token( text_table, yytext ); }                           
  22.  
  23.                                                
  24.                            
  25. %}
  26.  
  27. %%
  28.  
  29.  
  30. \\.            {  dprintf( "ESC(%c)\n", yytext[1]); 
  31.                   SETYYLVAL( yylval.i );
  32.                   yylval.i.val=yytext[1]; 
  33.                   return TOK_CHAR; }
  34. [0-9]+         {  yylval.i.val = atoi( yytext ); 
  35.                   SETYYLVAL( yylval.i );
  36.                   dprintf("int(%d)\n", yylval.i.val);  
  37.                   return TOK_NUM; }
  38. [0-9]+\.[0-9]+ {  yylval.f.val = atof( yytext ); 
  39.                   SETYYLVAL( yylval.f );
  40.                   dprintf("num(%f)\n", yylval.f.val);  
  41.                   return TOK_FLOAT; }
  42. \in            {  
  43.                   SETYYLVAL( yylval.i );
  44.                   return TOK_IN; }
  45. [a-zA-Z_][a-zA-Z_0-9]*      { yylval.s.val = STRDUP( yytext ); 
  46.                               SETYYLVAL( yylval.s );
  47.                               dprintf("name '%s'\n",yytext);  
  48.                               return TOK_NAME; }
  49. [ \t]*         {  SETYYLVAL( yylval.s ); }
  50. \\[ \t]*\n@    {  SETYYLVAL( yylval.s );  /* line continuation */
  51.                   lineno++; charno=0;  }
  52. \#.*\n         {  SETYYLVAL( yylval.s );  /* #-comment */
  53.                   tt_store( text_table, lineno );
  54.                   lineno++; charno=0; 
  55.                   return TOK_NL; }
  56. '[^'\n]*'      {  yylval.s.val = STRDUP( yytext );
  57.                   SETYYLVAL( yylval.s );
  58.                   dprintf( "%s", yytext ); return TOK_STRING; }
  59. \"[^\"\n]*\"   {  yylval.s.val = STRDUP( yytext );
  60.                   SETYYLVAL( yylval.s );
  61.                   dprintf( "%s", yytext ); return TOK_STRING; }
  62.  
  63. ^@             {  STORETEXT();
  64.                   yylval.i.line=lineno; return TOK_AT; } 
  65. \$             {  
  66.                   SETYYLVAL( yylval.s );
  67.                   return TOK_DOL;  }                 
  68. \.             {  
  69.                   SETYYLVAL( yylval.s );
  70.                   return TOK_DOT;  }
  71. \,             {  
  72.                   SETYYLVAL( yylval.s );
  73.                   return TOK_COM;  }
  74. \==            {  
  75.                   SETYYLVAL( yylval.i );
  76.                   return TOK_EQEQ;  }
  77. \!=            {  
  78.                   SETYYLVAL( yylval.i );
  79.                   return TOK_NE;  }
  80. \=             {  
  81.                   SETYYLVAL( yylval.i );
  82.                   return TOK_EQ;  }
  83. \<             {  
  84.                   SETYYLVAL( yylval.i );
  85.                   return TOK_LT;  }
  86. \>             {  
  87.                   SETYYLVAL( yylval.i );
  88.                   return TOK_GT;  }
  89. \<=            {  
  90.                   SETYYLVAL( yylval.i );
  91.                   return TOK_LTEQ;  }
  92. \>=            {  
  93.                   SETYYLVAL( yylval.i );
  94.                   return TOK_GTEQ;  }
  95. \!             {  
  96.                   SETYYLVAL( yylval.i );
  97.                   return TOK_NOT;   }
  98. \*             {  
  99.                   SETYYLVAL( yylval.s );
  100.                   return TOK_STAR;  }
  101. \+             {  
  102.                   SETYYLVAL( yylval.s );
  103.                   return TOK_PLUS;  }
  104. \-             {  
  105.                   SETYYLVAL( yylval.s );
  106.                   return TOK_MINUS;  }
  107. \/             {  
  108.                   SETYYLVAL( yylval.s );
  109.                   return TOK_DIV;  }
  110. \*=            {  
  111.                   SETYYLVAL( yylval.s );
  112.                   return TOK_MUL_S; }
  113. \+=            {  
  114.                   SETYYLVAL( yylval.s );
  115.                   return TOK_PLUS_S; }
  116. \-=            {  
  117.                   SETYYLVAL( yylval.s );
  118.                   return TOK_MINUS_S;  }
  119. \/=            {  
  120.                   SETYYLVAL( yylval.s );
  121.                   return TOK_DIV_S;  }
  122. \++            {  
  123.                   SETYYLVAL( yylval.s );
  124.                   return TOK_PLUSPLUS;  }
  125. \--            {  
  126.                   SETYYLVAL( yylval.s );
  127.                   return TOK_MINUSMINUS;  }
  128. \|\|           {  
  129.                   SETYYLVAL( yylval.s );
  130.                   return TOK_OR; }
  131. \&\&           {  
  132.                   SETYYLVAL( yylval.s );
  133.                   return TOK_AND; }
  134. \(             {  
  135.                   SETYYLVAL( yylval.s );
  136.                   return TOK_OPEN;  }
  137. \)             {  
  138.                   SETYYLVAL( yylval.s );
  139.                   return TOK_CLOSE;  }
  140. \[             {  
  141.                   SETYYLVAL( yylval.s );
  142.                   return TOK_OPENB;  }
  143. \]             {  
  144.                   SETYYLVAL( yylval.s );
  145.                   return TOK_CLOSEB;  }
  146. \:             {  
  147.                   SETYYLVAL( yylval.i );
  148.                   return TOK_COLON;  }
  149. \;             {  
  150.                   SETYYLVAL( yylval.i );
  151.                   return TOK_SCOL;   }
  152. \n             {  
  153.                   SETYYLVAL( yylval.s );
  154.                   tt_store( text_table, lineno );
  155.                   lineno++; charno=0; 
  156.                   return TOK_NL; }
  157. .              { 
  158.                   SETYYLVAL( yylval.i );
  159.                   yylval.i.val=yytext[0]; 
  160.                /* printf( "CHAR: %d\n", yytext[0] ); */
  161.                   return TOK_CHAR; }
  162. ^@[ \t]*if           { STORETEXT(); yylval.i.line=lineno; return TOK_IF; }    
  163. ^@[ \t]*else         { STORETEXT(); yylval.i.line=lineno; return TOK_ELSE; }    
  164. ^@[ \t]*endif        { STORETEXT(); yylval.i.line=lineno; return TOK_ENDIF; }   
  165. ^@[ \t]*embed        { STORETEXT(); yylval.i.line=lineno; return TOK_EMBED; }   
  166. ^@[ \t]*emit         { STORETEXT(); yylval.i.line=lineno; return TOK_EMIT; }  
  167. ^@[ \t]*function     { STORETEXT(); yylval.i.line=lineno; return TOK_FUNCTION; }
  168. ^@[ \t]*endfunction  { STORETEXT(); yylval.i.line=lineno; return TOK_ENDFUNCTION; }
  169. ^@[ \t]*switch       { STORETEXT(); yylval.i.line=lineno; return TOK_SWITCH; }
  170. ^@[ \t]*case         { STORETEXT(); yylval.i.line=lineno; return TOK_CASE; }
  171. ^@[ \t]*for          { STORETEXT(); yylval.i.line=lineno; return TOK_FOR; }
  172. ^@[ \t]*endswitch    { STORETEXT(); yylval.i.line=lineno; return TOK_ENDSWITCH;}
  173. ^@[ \t]*endfor       { STORETEXT(); yylval.i.line=lineno; return TOK_ENDFOR; }
  174. ^@[ \t]*return       { STORETEXT(); yylval.i.line=lineno; return TOK_RETURN; }
  175. ^@[ \t]*break        { STORETEXT(); yylval.i.line=lineno; return TOK_BREAK; }
  176. ^@[ \t]*push         { STORETEXT(); yylval.i.line=lineno; return TOK_PUSH; }
  177. ^@[ \t]*pop          { STORETEXT(); yylval.i.line=lineno; return TOK_POP; }
  178. ^@[ \t]*output       { STORETEXT(); yylval.i.line=lineno; return TOK_OUTPUT; }
  179. ^@[ \t]*local        { STORETEXT(); yylval.i.line=lineno; return TOK_LOCAL; }
  180. ^@[ \t]*use          { STORETEXT(); yylval.i.line=lineno; return TOK_USE; }
  181. ^@[ \t]*exit         { STORETEXT(); yylval.i.line=lineno; return TOK_EXIT; }
  182.  
  183. %%
  184.  
  185.  
  186.